home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / misc / emu / Apex-src.lha / BOOTA.68K < prev    next >
Text File  |  2001-09-30  |  4KB  |  145 lines

  1. ;BOOTA.68K    JUN-30-88
  2. ;Apex bootstrap for the Amiga computer.
  3. ;Written by Loren Blaney
  4. ;
  5. ;REVISION HISTORY:
  6. ;FEB-13-87, Original, converted from Stride bootstrap (BOOT.68K).
  7. ;MAY-16-87, Initialize all memory to zero.
  8. ;JUN-88, Remove bit plane initialization.
  9. ;
  10. ;This code resides in the first three blocks (two sectors) of the boot
  11. ; disk. The Amiga boot PROM reads the first sector from the disk,
  12. ; verifies that it says: "KICK", and then reads the next 256K bytes and
  13. ; loads them starting at $FC0000. It then starts this program which
  14. ; initializes the Amiga hardware, moves RESCOD.SYS into its proper
  15. ; places in memory and starts it. RESCOD.SYS, in turn, reads in
  16. ; SYSTEM.SYS (APEX.XPL) and starts it.
  17. ;
  18. ;This code is installed by using LOAD and WRITE. First make sure that
  19. ; the unit to be installed onto is not in a sub directory.
  20. ;
  21. ; LOAD BOOTA
  22. ;    CHANGE DEFAULTS (Y/N)? Y
  23. ;    XPL EXECUTION BASE ADDRESS?        $0
  24. ;    MINIMUM EXECUTION ADDRESS?        $FBFE00
  25. ;    MAXIMUM EXECUTION ADDRESS?        $FC00FF
  26. ;    LOAD LOCATION OF MINIMUM ADDRESS?    $8000
  27. ;    CHANGE DEFAULTS (Y/N)? N
  28. ;    (CTRL-C)
  29. ;
  30. ; WRITE
  31. ;    UNIT? 0
  32. ;    BLOCK? 0
  33. ;    BUFFER? $8000
  34. ;    SIZE (BLOCKS)? 3
  35. ;
  36. ;The boot boot (the real boot in real ROM) does not copy the two blocks
  37. ; containing "KICK" into RAM. Hence the RAM disk appears to start at
  38. ; FBFE00 (= FC0000 - 200). The RAM disk is 1024 blocks long, and it
  39. ; actually contains blocks 2-1025. In practice only blocks 9-1023 are
  40. ; used.
  41. ;
  42. ;    DISK    RAM    CONTENTS
  43. ;    0    -    KICK
  44. ;    1    -    0
  45. ;    2    FC0000    BOOTA
  46. ;    3    FC0100    0
  47. ;    4-8    FC0200    unused
  48. ;    9-12    FC0700    directory
  49. ;    13-16    FC0B00    backup directory
  50. ;    17-1023    FC0F00    normal file space
  51. ;    1024    FFFE00    extra block
  52. ;    1025    FFFF00    extra block
  53. ;
  54. ;
  55. MEMTOP    EQU    $80000        ;Highest memory address +1
  56. VSTART    EQU    $0400        ;Start location for RESCOD
  57.  
  58. CIAA    EQU    $BFE001        ;Base address of 8520-A chip
  59. ;Offsets to CIA registers:
  60. PRA    EQU    $0        ;Peripheral Data Register A
  61. DDRA    EQU    $200        ;Data Direction Register A
  62.  
  63. CHIPREG    EQU    $DFF000        ;Base address of chip registers
  64. ;Offsets to chip registers:
  65. DMACON    EQU    $96        ;DMA control
  66. INTENA    EQU    $9A        ;Interrupt enable bits
  67. INTREQ    EQU    $9C        ;Interrupt request bits
  68.  
  69. ;-----------------------------------------------------------------------
  70. ;Move RESCOD.SYS to its correct locations.
  71. ; RESCOD.SYS starts in block 17 which got loaded at 17 *256 + $FC0000
  72. ;  = $FC1100
  73. ;
  74.     ORG    $FBFE00        ;Amiga's boot wants to see "KICK" on
  75.     ASCII    'KICK'        ; the first sector of the disk
  76.     DCB.B    512-4,0        ;Fill the rest of the sector with zeros
  77.  
  78.     ORG    $FC0000        ;Amiga's boot enters at $FC0002
  79.     DC.W    $1111        ; (?)
  80.  
  81. START    JMP    START2.L    ;Amiga boot requires a JMP here
  82.     ASCII    "Apex, V1.8, (c) Jun-15-88 P.J.R. Boyle"
  83.  
  84. START2    LEA    MEMTOP.L,SP    ;Set the stack in the designated loc
  85.  
  86.     MOVE.L    #$20000,D0    ;Kill some time (because ROM Kernal does
  87. BT10    SUBQ.L    #1,D0        ; it)
  88.     BGT.S    BT10
  89.  
  90.     LEA    CIAA.L,A4
  91.     MOVE.B    #$03,DDRA(A4)    ;Set bits 0 & 1 as outputs
  92.     MOVE.B    #$02,PRA(A4)    ;Overlay = 0 (off), LED = dim
  93.  
  94.     LEA    CHIPREG.L,A4
  95.     MOVE.W    #$7FFF,D6    ;Disable all bits
  96.     MOVE.W    D6,INTENA(A4)    ;Clear all interrupt enable bits
  97.     MOVE.W    D6,INTREQ(A4)    ;Clear all interrupt requests
  98.     MOVE.W    D6,DMACON(A4)    ;Disable all DMA channels
  99.  
  100.     ORI    #$0700,SR    ;Disable interrupts
  101.  
  102.     LEA    -4(SP),A6    ;Initialize all memory to zero
  103.     MOVEQ    #0,D0
  104. BT20    MOVE.L    D0,(A6)
  105.     SUBQ.L    #4,A6        ;(Does not set condition codes)
  106.     CMPA.L    #0,A6
  107.     BGE.S    BT20
  108.  
  109. ;Move low part of RESCOD:
  110.     LEA    $FC0F00.L,A6    ;Set "from" address
  111.     LEA    $0000,A5    ;Set "to" address
  112.     MOVE.W    #16*8,D0    ;Move 16 blocks ($0000 up to $1000)
  113.     BSR.S    MOVBLK        ;Go do it
  114.  
  115. ;Move high part of RESCOD:
  116.     LEA    $FC1F00.L,A6    ;Set "from" address
  117.     LEA    MEMTOP-$4000.L,A5 ;Set "to" address
  118.     MOVE.W    #63*8+4,D0    ;Move 63.5 blocks (-$4000 up to -$0080)
  119.     BSR.S    MOVBLK        ;Go do it
  120.  
  121.     JMP    VSTART        ;Enter RESCOD
  122.  
  123. ;-----------------------------------------------------------------------
  124. ;Move D0*32 bytes from A6 to A5.
  125. ; Most registers are destroyed.
  126. ; Note unusual entry point.
  127. ;
  128. MOV10    MOVEM.L    (A6)+,A4/D1-D7    ;Read 32 bytes at A6
  129.     MOVEM.L    A4/D1-D7,(A5)    ;Write 32 bytes at A5
  130.     ADDA.L    #32,A5        ;(Post incrementing is not allowed)
  131. MOVBLK    DBF    D0,MOV10    ;Loop until done
  132.     RTS
  133.  
  134.  
  135. MAX    EQU    $FC0100        ;Maximum load location +1
  136.     IF    @ > MAX
  137. ERROR - TOO BIG, THIS WILL BOMB THE EXTENDED DIRECTORY
  138.     ELSE            ;(Extended dir won't work on RAM disk)
  139.     DCB.B    MAX-@, 0    ;Fill the rest of the block with zeros
  140.     ENDIF
  141.  
  142.     END
  143. CTORY
  144.     ELSE            ;(Extended dir won't work on RAM disk)
  145.     DCB.B